////
////  DownloadManager.swift
////  TestActorDownload
////
////  Created by rolodestar on 2025/6/13.
////
//
////
//import Foundation
//import SwiftData
//
//actor DownloadManagerActor {
//    private var activeTasks: [String: DownloadTask] = [:] // 任务ID: 任务对象
//    @MainActor private let modelContext: ModelContext // SwiftData 上下文
//    var  dataModel: DownloadDataModel?
//    
//    public static var shared: DownloadManagerActor?
//    
//    @MainActor
//    public static func createShared(modelContext: ModelContext) -> DownloadManagerActor{
//        if shared == nil{
//            shared =  DownloadManagerActor(modelContext: modelContext)
//            return shared!
//        }else{
//            return shared!
//        }
//    }
//    // 全局后台 Session（支持应用退出后下载）
//    private lazy var backgroundSession: URLSession = {
//        let config = URLSessionConfiguration.default//.background(withIdentifier: "com.app.videoDownloader")
//        return URLSession(configuration: config, delegate: nil, delegateQueue: nil)
//    }()
//    @MainActor
//    init(modelContext: ModelContext) {
//        self.modelContext = modelContext
//    }
//    
//    /// 添加新下载任务
//    func addDownloadTask(url: URL) async throws {
//        let taskId = UUID().uuidString
//        let task = DownloadTask(id: taskId, remoteURL: url, session: backgroundSession)
//        
//        //        task.dataModel = dataModel
//        
//        activeTasks[taskId] = task
//        
//        
//        try await task.start() // 开始下载
//        await MainActor.run{
//            let dataModel = DownloadDataModel(id: taskId, remoteURL: url)
//            modelContext.insert(dataModel)
//            dataModel.status = .downloading
//        }
//    }
//    
//    /// 暂停任务（保存断点）
//    func pauseTask(id: String) async {
//        guard let task = activeTasks[id] else { return }
//        await task.pause()
//        if let dataModel = await fetchModel(id: id) {
//            dataModel.resumeData = task.resumeData
//            dataModel.status = .paused
//        }
//    }
//    
//    /// 恢复任务（断点续传）
//    func resumeTask(id: String) async throws {
//        guard let dataModel = await fetchModel(id: id),
//                let resumeData = dataModel.resumeData else { return }
//        
//        let task = DownloadTask(id: id, remoteURL: dataModel.remoteURL, session: backgroundSession)
//        try await task.resume(with: resumeData)
//        activeTasks[id] = task
//        dataModel.status = .downloading
//        
//    }
//    @MainActor
//    func updateTaskStatus(id: String, localPath: String){
//        //        activeTasks[id]
//        
//        if let model =  fetchModel(id: id){
//            
//            viewThread(at: "manager func updateTaskStatus")
//            
//            model.localPath = localPath
//            try! modelContext.save()
//            
//        }
//        
//        
//    }
//    @MainActor
//    func updateTaskProcess(id: String, process: Double){
//        //        activeTasks[id]
//        
//        if let model =  fetchModel(id: id){
//            
//            viewThread(at: "manager func updateTaskProcess")
//            
//            model.currentProcess = process
//            try! modelContext.save()
//            
//        }
//        
//        
//    }
//    
//   @MainActor public func fetchModel(id: String) -> DownloadDataModel? {
//        
//        let descriptor = FetchDescriptor<DownloadDataModel>(predicate: #Predicate { $0.id == id })
//        return try? modelContext.fetch(descriptor).first
//    }
//}
//
//func viewThread(at : String){
//    print("at \(at),\(Thread.current)")
//}
